<?php
namespace libs\qoy\Cache;
/**
 * Memecahced 缓存
 *
 * - 使用序列化对需要存储的值进行转换，以提高速度
 * - 默认不使用zlib对值压缩
 * - 请尽量使用Memcached扩展
 * @param array $config 初始化配置
 * @param string $config['host'] Memcache域名
 * @param int $config['port'] Memcache端口
 * @param string $config['prefix'] key 前缀
 * @param string $config['username'] 用户名 
 * @param string $config['password'] 密码 
 * @throws ExceptionInternalServerError
 */
class Memcached extends Memcache {
     protected $config  = [
        'host'         => '127.0.0.1', // memcache主机
        'port'         => 11211, // memcache端口
        'prefix' => '', // memcache key前缀
        'username'     => '', //账号
        'password'     => '', //密码
    ];
     
     /**
      * 
      * @see Memcache->__construct
      * @param string $config['username'] 用户名 key prefix
      * @param string $config['password'] 密码 key prefix
      */
    public function __construct(array $config = []) {
        parent::__construct($config);
        if ('' != $this->config['username']) {
            $this->memcache->setOption(\Memcached::OPT_BINARY_PROTOCOL, true);
            $this->memcache->setSaslAuthData($this->config['username'], $this->config['password']);
        }
    }
    /**
     * 注意参数的微妙区别
     * @see Memcache->set
     */
    public function set(string $key, $value, int $expire = 600) {
        $this->memcache->set($this->formatKey($key), @serialize($value), $expire);
    }

    /**
     * 返回更高版本的Memcached实例
     * @return Memcached
     */
    protected function createMemcache() {
        return new Memcached();
    }
}
